/**
 * @file HI229.h
 * @brief HI229惯性传感器驱动头文件
 *        定义传感器数据结构体、解包控制宏及通信接口
 * @author 超核科技
 * @version 1.0
 * @date 2025-08-07
 * 
 * @par 修改日志:
 * @bug 待解决问题:
 */
#ifndef hi2xx_H
#define	hi2xx_H
/*陀螺仪：UART5,用dma传输tim2解算*/
#include "stdint.h"
#define	hi2xx_FRAME_LENGTH	82//数据长度
/*宏定义*/
#define hi2xx_Eular_Pitch		hi2xx->eul[0]
#define hi2xx_Eular_Yaw			hi2xx->eul[2]
#define hi2xx_Eular_Roll		hi2xx->eul[1]
typedef __packed struct{	// HI229传感器数据结构体（符合UART通信协议格式）
	uint8_t tag; 	/* 数据标签（固定为0x91，表示HI229传感器数据帧）*/
	uint8_t id; 	/* 模块ID（用于多传感器区分，范围0x01-0xFF）*/
	uint8_t rev[2];	/* 保留字段（协议预留，当前未使用）*/
	float prs; 		/* 气压值（单位: hPa）*/
	uint32_t ts;	/* 时间戳（传感器内部时钟，单位: ms）*/
	float acc[3];	/* 加速度数据[0:X轴(g), 1:Y轴(g), 2:Z轴(g)]*/
	float gyr[3];	/* 角速度数据[0:X轴(dps), 1:Y轴(dps), 2:Z轴(dps)]*/
	float mag[3];	/* 地磁数据[0:X轴(uT), 1:Y轴(uT), 2:Z轴(uT)]*/
	float eul[3]; 	/* 欧拉角数据[0:滚转(Roll,°), 1:俯仰(Pitch,°), 2:偏航(Yaw,°)]*/
	float quat[4]; 	/* 四元数数据[0:w, 1:x, 2:y, 3:z（归一化值）]*/
	uint16_t crc;	/* 数据帧CRC校验值（用于验证数据完整性）*/
	uint16_t len;	/* 数据帧总长度（与hi2xx_FRAME_LENGTH宏对应）*/
}hi2xx_t;//陀螺仪数据地址
extern hi2xx_t* hi2xx;	// 指向HI229传感器数据结构体的全局指针（解析后数据存储于此）
/**
 * @brief 初始化HI229传感器
 */
void hi2xx_Init(void);
/**
 * @brief UART空闲中断回调函数
 */
void hi2xx_callback(void);
#endif
